//using mixpanel;
//using System;
//using System.Collections.Generic;
//using UnityEngine;
//using UnityEngine.Purchasing;
//using Voodoo.Sauce.Internal.CrossPromo.Models;

//namespace Voodoo.Sauce.Internal.Analytics
//{
//	public static class MixpanelWrapper
//	{
//		private abstract class MixpanelEvent
//		{
//			public abstract void Track();
//		}

//		private class CustomMixpanelEvent : MixpanelEvent
//		{
//			public string EventName;

//			//public Value Props;

//			//public override void Track()
//			//{
//			//	if (Props != null)
//			//	{
//			//		Mixpanel.Track(EventName, Props);
//			//	}
//			//	else
//			//	{
//			//		Mixpanel.Track(EventName);
//			//	}
//			//}
//		}

//		private class OnGameStartedMixpanelEvent : MixpanelEvent
//		{
//			public override void Track()
//			{
//				Mixpanel.StartTimedEvent("Game Played");
//			}
//		}

//		private const string TAG = "MixpanelWrapper";

//		private const string AbTestPropertyName = "AB Test";

//		private const string OSTypePropertyName = "OS Type";

//		private const string FirstAppVersionPropertyName = "First Time App Version";

//		private const string CreationDatePropertyName = "Creation Date";

//		private const string VoodooSaucePropertyName = "VoodooSauce Version";

//		private const string AppLaunchedFirstTimeEventName = "App Launched First Time";

//		private const string AppLaunchedEventName = "App Launched";

//		private const string GamePlayedEventName = "Game Played";

//		private const string PrefsFSShownCount = "VoodooSauce_FSShownCount";

//		private const string PrefsRVShownCount = "VoodooSauce_RVShownCount";

//		private const string FsShownEventName = "FS Shown";

//		private const string RvShownEventName = "RV Shown";

//		private static bool _isInitialized;

//		private static bool _isEnabled;

//		private static Queue<MixpanelEvent> _queuedEvents = new Queue<MixpanelEvent>();

//		public static void Initialize(bool enabled)
//		{
//			_isEnabled = enabled;
//			if (_isEnabled)
//			{
//				VoodooLog.Log("MixpanelWrapper", "Mixpanel initialized, tracking pending events: " + _queuedEvents.Count);
//				while (_queuedEvents.Count > 0)
//				{
//					_queuedEvents.Dequeue().Track();
//				}
//				_isInitialized = true;
//			}
//		}

//		public static void MixpanelTrack(string eventName/*, Value props = null*/)
//		{
//			if (_isEnabled)
//			{
//				CustomMixpanelEvent customMixpanelEvent = new CustomMixpanelEvent();
//				customMixpanelEvent.EventName = eventName;
//				//customMixpanelEvent.Props = props;
//				CustomMixpanelEvent customMixpanelEvent2 = customMixpanelEvent;
//				if (!_isInitialized)
//				{
//					VoodooLog.Log("MixpanelWrapper", "Mixpanel NOT initialized queuing event..." + eventName);
//					_queuedEvents.Enqueue(customMixpanelEvent2);
//				}
//				else
//				{
//					customMixpanelEvent2.Track();
//				}
//			}
//		}

//		public static void OnFirstAppLaunched()
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//			{
//				VoodooLog.Log("MixpanelWrapper", string.Format("OnFirstAppLaunched: Sending {0} event to Mixpanel", "App Launched First Time"));
//				MixpanelTrack("App Launched First Time");
//			}
//		}

//		public static void OnAppLaunched()
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//			{
//				VoodooLog.Log("MixpanelWrapper", string.Format("OnAppLaunched: Sending {0} event to Mixpanel", "App Launched"));
//				MixpanelTrack("App Launched");
//			}
//		}

//		public static void OnGameStarted()
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//			{
//				OnGameStartedMixpanelEvent onGameStartedMixpanelEvent = new OnGameStartedMixpanelEvent();
//				if (!_isInitialized)
//				{
//					_queuedEvents.Enqueue(onGameStartedMixpanelEvent);
//				}
//				else
//				{
//					onGameStartedMixpanelEvent.Track();
//				}
//			}
//		}

//		public static void OnGameFinished(bool levelComplete, float score, int gameCount, Dictionary<string, object> eventProperties)
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//			{
//				//Value valuesFromProperties = GetValuesFromProperties(eventProperties);
//				//valuesFromProperties["Win"] = levelComplete;
//				//valuesFromProperties["Score"] = score;
//				//valuesFromProperties["Game Number"] = gameCount;
//				VoodooLog.Log("MixpanelWrapper", "Sending Game #" + gameCount + " played event to Mixpanel.");
//				//MixpanelTrack("Game Played", valuesFromProperties);
//			}
//		}

//		public static void RegisterMixpanelSuperProperties()
//		{
//			if (_isEnabled)
//			{
//				VoodooLog.Log("MixpanelWrapper", "Registering Mixpanel Super Properties");
//			//	Mixpanel.Register("AB Test", VoodooAnalytics.GetPlayerCohort());
//				//Mixpanel.Register("First Time App Version", Application.version);
//				//Mixpanel.Register("VoodooSauce Version", "3.4.0b4");
//				//Mixpanel.Register("OS Type", GetPlatform());
//				//Mixpanel.Register("Creation Date", DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss"));
//			}
//		}

//		public static void SetConsent(bool consent)
//		{
//			if (_isEnabled)
//			{
//				if (consent)
//				{
//					Mixpanel.OptInTracking();
//				}
//				else
//				{
//					Mixpanel.OptOutTracking();
//				}
//			}
//		}

//		public static void TrackFsShown()
//		{
//			if (_isEnabled)
//			{
//				//Value value = new Value();
//				int @int = PlayerPrefs.GetInt("VoodooSauce_FSShownCount", 0);
//				@int++;
//				PlayerPrefs.SetInt("VoodooSauce_FSShownCount", @int);
//			//	value["Ad Number"] = @int;
//				VoodooLog.Log("MixpanelWrapper", "Sending FS Shown event to Mixpanel");
//			//	MixpanelTrack("FS Shown", value);
//			}
//		}

//		public static void TrackRvShown()
//		{
//			if (_isEnabled)
//			{
//			//	Value value = new Value();
//				int @int = PlayerPrefs.GetInt("VoodooSauce_RVShownCount", 0);
//				@int++;
//				PlayerPrefs.SetInt("VoodooSauce_RVShownCount", @int);
//				//value["Ad Number"] = @int;
//				VoodooLog.Log("MixpanelWrapper", "Sending RV Shown event to Mixpanel");
//				//MixpanelTrack("RV Shown", value);
//			}
//		}

//		public static void TrackCustomEvent(string eventName, Dictionary<string, object> eventProperties)
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//			{
//				//Value valuesFromProperties = GetValuesFromProperties(eventProperties);
//				VoodooLog.Log("MixpanelWrapper", "Sending custom event to Mixpanel : " + eventName);
//				//MixpanelTrack(eventName, valuesFromProperties);
//			}
//		}

//		//public static void TrackPurchase(Product product, float productPriceInUSD)
//		//{
//		//	if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//		//	{
//		//		Value value = new Value();
//		//		value["Product ID"] = product.definition.id;
//		//		value["Price"] = productPriceInUSD;
//		//		VoodooLog.Log("MixpanelWrapper", "Tracking purchase in Mixpanel too");
//		//		MixpanelTrack("Purchased", value);
//		//	}
//		//}

//		//private static Value GetValuesFromProperties(Dictionary<string, object> eventProperties)
//		//{
//		//	Value value = new Value();
//		//	if (eventProperties != null)
//		//	{
//		//		foreach (string key in eventProperties.Keys)
//		//		{
//		//			if (eventProperties[key] is int)
//		//			{
//		//				value[key] = (int)eventProperties[key];
//		//			}
//		//			else if (eventProperties[key] is string)
//		//			{
//		//				value[key] = (string)eventProperties[key];
//		//			}
//		//			else if (eventProperties[key] is float)
//		//			{
//		//				value[key] = (float)eventProperties[key];
//		//			}
//		//			else if (eventProperties[key] is bool)
//		//			{
//		//				value[key] = (bool)eventProperties[key];
//		//			}
//		//			else
//		//			{
//		//				VoodooLog.LogW("MixpanelWrapper", "Ignoring unsupported event property type for key \"" + key + "\"!");
//		//			}
//		//		}
//		//		return value;
//		//	}
//		//	return value;
//		//}

//		private static string GetPlatform()
//		{
//			return "Android";
//		}

//		public static void TrackCrossPromoErrorEvent(string eventName, string errorMessage)
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort())
//			{
//				//Value value = new Value();
//				//value["Error"] = errorMessage;
//				VoodooLog.Log("MixpanelWrapper", "Sending " + eventName + " to Mixpanel");
//				//MixpanelTrack(eventName, value);
//			}
//		}

//		public static void TrackCrossPromoEvent(string eventName, AssetModel asset)
//		{
//			if (_isEnabled && VoodooAnalytics.PlayerIsInACohort() && asset != null)
//			{
//				//Value value = new Value();
//			//	value["Game Name"] = asset.game.name;
//				//value["Ad Format"] = asset.cp_format;
//				VoodooLog.Log("MixpanelWrapper", "Sending " + eventName + " to Mixpanel");
//				//MixpanelTrack(eventName, value);
//			}
//		}
//	}
//}
